﻿/// <summary>
/// Form om spellen te beheren
/// </summary>
/// <author>Kenny Vaneetvelde</author>

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
using QuizzAdminData;

namespace QuizzAdmin
{
    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    /// <author>Kenny Vaneetvelde</author>
    public partial class MaakSpelForm : Form
    {
        private List<Spel> spellen;
        private List<Team> teams;
        private List<Vraag> vragen;

        public MaakSpelForm()
        {
            InitializeComponent();
        }

        private void MaakSpelForm_Load(object sender, EventArgs e)
        {
            LaadSpellen();

            teams = TeamDB.GetTeams();
            int index = 0;

            foreach (Team t in teams)
            {
                lvTeamsAll.Items.Add(t.Id.ToString());
                lvTeamsAll.Items[index].SubItems.Add(t.Naam);
                index++;
            }

            vragen = VragenDB.GetVragen();
            index = 0;
            foreach (Vraag v in vragen)
            {
                lvVragenAll.Items.Add(v.Id.ToString());
                lvVragenAll.Items[index].SubItems.Add(v.Vraag_tekst);
                index++;
            }
        }

        private void btnNieuwSpel_Click(object sender, EventArgs e)
        {
            try
            {
                SpelDB.InsertNewSpel();
                LaadSpellen();
                lvSpellen.Items[lvSpellen.Items.Count - 1].Selected = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            } 
        }

        private void LaadSpellen()
        {
            spellen = SpelDB.GetSpellen();
            lvSpellen.Items.Clear();
            lvTeamsSpel.Items.Clear();
            lvVragenSpel.Items.Clear();

            if (spellen.Count > 0)
            {

                int index = 0;
                foreach (Spel s in spellen)
                {
                    lvSpellen.Items.Add(s.Id.ToString());
                    lvSpellen.Items[index].SubItems.Add(s.DateString);
                    index++;
                }

                lvSpellen.Items[0].Selected = true;

            }
        }

        private void btnVoegTeamToe_Click(object sender, EventArgs e)
        {
            if (lvSpellen.SelectedItems.Count > 0 && lvTeamsAll.SelectedItems.Count > 0)
            {

                int selectedTeam = lvTeamsAll.SelectedItems[0].Index;
                int selectedSpel = lvSpellen.SelectedItems[0].Index;

                try
                {
                    TeamDB.InsertTeamInSpel(spellen[selectedSpel].Id, teams[selectedTeam].Id);
                    LaadSpellen();
                    lvSpellen.Items[selectedSpel].Selected = true;
                    lvTeamsAll.Items[selectedTeam].Selected = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
            else
            {
                MessageBox.Show("Gelieve een spel en een team te selecteren.");
            }

        }

        private void btnVerwijderTeam_Click(object sender, EventArgs e)
        {
            if (lvSpellen.SelectedItems.Count > 0 && lvTeamsSpel.SelectedItems.Count > 0)
            {

                int selectedTeam = lvTeamsAll.SelectedItems[0].Index;
                int selectedSpel = lvSpellen.SelectedItems[0].Index;

                try
                {
                    TeamDB.DeleteTeamFromSpel(spellen[selectedSpel].Id, teams[selectedTeam].Id);
                    LaadSpellen();
                    lvSpellen.Items[selectedSpel].Selected = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
            else
            {
                MessageBox.Show("Gelieve een team te selecteren.");
            }
        }

        private void lvSpellen_SelectedIndexChanged(object sender, EventArgs e)
        {
            int selectedSpel;

            if (lvSpellen.SelectedItems.Count > 0)
            {
                lvTeamsSpel.Items.Clear();
                lvVragenSpel.Items.Clear();
                selectedSpel = lvSpellen.SelectedItems[0].Index;

                int index = 0;

                foreach (Team t in spellen[selectedSpel].Teams)
                {
                    lvTeamsSpel.Items.Add(t.Id.ToString());
                    lvTeamsSpel.Items[index].SubItems.Add(t.Naam);
                    index++;
                }

                index = 0;

                foreach (Vraag v in spellen[selectedSpel].Vragen)
                {
                    lvVragenSpel.Items.Add(v.Id.ToString());
                    lvVragenSpel.Items[index].SubItems.Add(v.Vraag_tekst);
                    index++;
                }                
            }
        }

        private void btnVoegVraagToe_Click(object sender, EventArgs e)
        {
            if (lvSpellen.SelectedItems.Count > 0 && lvVragenAll.SelectedItems.Count > 0)
            {

                int selectedVraag = lvVragenAll.SelectedItems[0].Index;
                int selectedSpel = lvSpellen.SelectedItems[0].Index;

                try
                {
                    VragenDB.InsertVraagInSpel(spellen[selectedSpel].Id, vragen[selectedVraag].Id);
                    LaadSpellen();
                    lvSpellen.Items[selectedSpel].Selected = true;
                    lvVragenAll.Items[selectedVraag].Selected = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
            else
            {
                MessageBox.Show("Gelieve een spel en een vraag te selecteren.");
            }
        }

        private void btnVerwijderVraag_Click(object sender, EventArgs e)
        {
            if (lvSpellen.SelectedItems.Count > 0 && lvVragenSpel.SelectedItems.Count > 0)
            {

                int selectedVraag = lvVragenAll.SelectedItems[0].Index;
                int selectedSpel = lvSpellen.SelectedItems[0].Index;

                try
                {
                    VragenDB.DeleteVraagFromSpel(spellen[selectedSpel].Id, vragen[selectedVraag].Id);
                    LaadSpellen();
                    lvSpellen.Items[selectedSpel].Selected = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
            else
            {
                MessageBox.Show("Gelieve een vraag te selecteren.");
            }
        }
    }
}
